package PrjConf

import (
	"dgo/goutils/utils"
	"errors"
	"fmt"
	"gitee.com/ymofen/supervalue"
)

var (
	// 如果为空则使用 CONFIG_CONF_API_SVR_URL
	CONFIG_NETLICENCE_URL            = ""
	CONFIG_NETLICENCE_APPID   string = ""
	CONFIG_NETLICENCE_APPTYPE string = ""
)

func check_netlicence_evn() error {
	if len(CONFIG_NETLICENCE_URL) == 0 {
		if cmdflag_api_url != nil {
			CONFIG_NETLICENCE_URL = *cmdflag_api_url
		} else if len(CONFIG_CONF_API_SVR_URL) > 0 {
			CONFIG_NETLICENCE_URL = CONFIG_CONF_API_SVR_URL
		} else {
			return errors.New("缺少[CONFIG_NETLICENCE_URL]参数, 不能进行授权验证!")
		}
	}

	if len(CONFIG_NETLICENCE_APPTYPE) == 0 {
		if len(APP_TYPE) > 0 {
			CONFIG_NETLICENCE_APPTYPE = APP_TYPE
		} else if cmdflag_app_type != nil {
			CONFIG_NETLICENCE_APPTYPE = *cmdflag_app_type
		}
	}

	if len(CONFIG_NETLICENCE_APPID) == 0 {
		if len(APP_UUID) > 0 {
			CONFIG_NETLICENCE_APPID = APP_UUID
		} else if cmdflag_app_id != nil {
			CONFIG_NETLICENCE_APPID = *cmdflag_app_id
		} else {
			CONFIG_NETLICENCE_APPID = MakeAppId(CONFIG_NETLICENCE_APPTYPE, "")
			//return errors.New("缺少[CONFIG_NETLICENCE_APPID]参数, 不能进行授权验证!")
		}
	}

	return nil
}

func CheckNetLicence(saveflag int) (bool, string) {
	err1, r1, confstr := GetNetLicenceConf(saveflag)
	if r1 == -2 {
		utils.Log.ErrTypef("授权异常", "授权服务器网络出现异常:%v", err1)
		return false, ""
	} else if r1 == -1 {
		utils.Log.ErrTypef("授权异常", "授权服异常:%v", err1)
		return false, ""
	} else if r1 == 0 {
		return true, confstr
	} else {
		utils.Log.ErrTypef("授权异常", "授权服异常, 没有返回任何提示信息!")
		return false, ""
	}
}

//     URL: /sys/netlicence?id=XXXX-BBS&group=XXXX&save=1
//    参数: id: appid, group: 分组, save:没有时进行存储到数据库,等待分配授权
//  code := -2 : 网络异常

func GetNetLicenceConf(saveflag int) (err error, code int, conf string) {
	err = check_netlicence_evn()
	if err != nil {
		return err, -2, ""
	}

	url := fmt.Sprintf("%s/sys/netlicence?id=%s&group=%s&save=%d", CONFIG_NETLICENCE_URL, CONFIG_NETLICENCE_APPID, CONFIG_NETLICENCE_APPTYPE, saveflag)
	respBuf, err := GetUrl(url)
	if err != nil {
		return err, -2, ""
	}

	resp, err := wrapper.NewSVFromBuf(respBuf)
	if err != nil {
		return err, -2, ""
	}

	if resp != nil {
		strmsg := resp.AsString("msg", "")
		if len(strmsg) > 0 {
			return errors.New(strmsg), resp.AsInt("code", 0), resp.AsString("data", "")
		}
		return nil, resp.AsInt("code", 0), resp.AsString("data", "")
	} else {
		return nil, -1, ""
	}

}
